package org.example;

import lombok.AllArgsConstructor;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @author hsj
 * @description:会签辅助
 * @date 2023/2/9 15:00
 */
@Component
@AllArgsConstructor
public class MultiInstanceProcessHelper {

    public List<String> getUserIds(DelegateExecution execution) {
        return new ArrayList<String>(){{
//            add(TestApp.UserId.applyUserId);
//            add(TestApp.UserId.bossUserId);
//            add(TestApp.UserId.devManageUserId);
            add(TestApp.UserId.testManageUserId);
        }};
    }

    public boolean isComplete(DelegateExecution execution) {
//        按照BPMN2.0规范的要求，用于为每个实例创建执行的父执行，会提供下列变量：
//        nrOfInstances：实例总数。
//        nrOfActiveInstances：当前活动的（即未完成的），实例数量。对于顺序多实例，这个值总为1。
//        nrOfCompletedInstances：已完成的实例数量。
//        可以调用execution.getVariable(x)方法获取这些值。
//        另外，每个被创建的执行，都有局部变量（对其他执行不可见，也不存储在流程实例级别）：
//        loopCounter：给定实例在for-each循环中的index。可以通过Flowable的elementIndexVariable属性为loopCounter变量重命名。

//        isSequential属性代表了活动的实例为顺序还是并行执行

        Integer nrOfInstances = (Integer) execution.getVariable("nrOfInstances");
        Integer completeInstCount = (Integer) execution.getVariable("nrOfCompletedInstances");
        Integer nrOfCompletedInstances = (Integer) execution.getVariable("nrOfCompletedInstances");
        return nrOfCompletedInstances >= 2;//完成2个就算通过
    }
}
